package com.syt.cellphone.information.data

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.syt.cellphone.information.data.dao.PhoneBaseDao
import com.syt.cellphone.information.data.dao.PhoneGroupDao
import com.syt.cellphone.information.data.pojo.PhoneBase
import com.syt.cellphone.information.data.pojo.PhoneGroup

/**
 *  @author: syt
 *  创建时间: 2020/8/3 10:05
 *  @功能   数据库管理类
 */
@Database(
    entities = [PhoneBase::class, PhoneGroup::class],
    version = 1,
    exportSchema = true
)
abstract class AppDatabase : RoomDatabase() {

    companion object {

        private const val DATABASE_NAME = "cellphone.db"

        fun createDatabase(context: Context): AppDatabase {
            return Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME)
                // 如果未找到将旧数据库架构迁移到最新架构版本的，则允许Room破坏性地重新创建数据库表
                .fallbackToDestructiveMigration()
//                .addMigrations(migration_1_2)
                .addCallback(object : Callback() {
                    override fun onDestructiveMigration(db: SupportSQLiteDatabase) {
                        // 协程的使用，启动一个新的协程，
//                        GlobalScope.launch { Restore.rest }
                    }
                })
                // 禁止主线程查询,防止ANR（应用程序无响应）
                .allowMainThreadQueries()
                .build()
        }

        // 数据库升级版本，暂时备用。
        private val migration_1_2 = object : Migration(1, 2) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("")
            }
        }

    }

    abstract fun phoneBaseDao(): PhoneBaseDao
    abstract fun phoneGroupDao(): PhoneGroupDao
}